#include "ipc/Semaforo.h"

Semaforo::Semaforo(const char* path, int id){
    idSemaforo = semget(ftok(path, id), 1, IPC_CREAT | 0666);
}

void Semaforo::lock(){
    struct sembuf sops;
    sops.sem_num = 0;
    sops.sem_op = 1;
    sops.sem_flg = 0;
    semop(idSemaforo, &sops, 1);
}

void Semaforo::unlock(){
    struct sembuf sops;
    sops.sem_num = 0;
    sops.sem_op = -1;
    sops.sem_flg = 0;
    semop(idSemaforo, &sops, 1);
}

Semaforo::~Semaforo(){
    //semctl(idSemaforo, 0, IPC_RMID);
}

Lock::Lock(Semaforo &s):s(s){
    s.lock();
}

Lock::~Lock(){
    s.unlock();
}
